Amazon Aurora
https://gyazo.com/f1357be39edcac7af02c188b90fee9e5
#wip
https://aws.amazon.com/jp/rds/aurora/?aurora-whats-new.sort-by=item.additionalFields.postDateTime&aurora-whats-new.sort-order=desc
Amazon Aurora Serverless
https://qiita.com/kumagi/items/67f9ac0fb4e6f70c056d
https://dev.classmethod.jp/articles/developers-io-2019-in-osaka-aurora-or-rds/
Aurora MySQL
https://tech.repro.io/entry/2024/10/23/085610
トラブル5選
gpt-5.icon
Amazon Aurora は、AWS が提供するフルマネージド型のリレーショナルデータベースサービスで、高いパフォーマンス・可用性を備えつつ、MySQL や PostgreSQL と互換性があるのが特徴です。
以下のようなポイントで理解すると全体像が掴みやすいです。
1. 基本概要
RDSファミリーの一部
Amazon Aurora はAmazon RDS の一種で、AWS がバックエンドのインフラ(プロビジョニング、パッチ適用、バックアップ、スケーリング)を自動管理します。
互換性
MySQL または PostgreSQL の既存アプリを、最小限の変更で移行可能。
設計目標
商用データベース(Oracle, SQL Server 等)の高性能と可用性を、OSS データベースの低コストで実現すること。
2. アーキテクチャの特徴
ストレージ分離アーキテクチャ
計算ノード(DBインスタンス)とストレージ層が分離され、ストレージは自動で複数AZに6重コピーされます。
自動スケーリング
ストレージは必要に応じて最大 128TB まで自動拡張。
高可用性
AZ障害時でも自動フェイルオーバーが可能。
読み取りレプリカ
最大15個のリードレプリカを作成可能で、読み取り性能を水平スケールできます。
3. 性能面
AWSによると、Aurora MySQLは通常のMySQLの最大5倍、Aurora PostgreSQLは標準PostgreSQLの最大3倍のスループット。
高速化の要因:
カスタムビルドの分散ストレージエンジン
ログ構造化ストレージ(Redo/Undoログの最適化)
ネットワーク越しのストレージアクセスを高速化
4. 運用面でのメリット
自動バックアップ(継続的バックアップ、PITR)
マネージドパッチ適用
監視統合(CloudWatch, Performance Insights)
セキュリティ(VPC内配置、KMS暗号化、IAM統合)
5. バリエーション
Aurora Serverless v2
負荷に応じて自動でコンピューティング容量をスケーリング(秒単位課金)。
Global Database
複数リージョンに低レイテンシでレプリケーション。
Multi-Master(Aurora MySQLのみ一部対応)
複数の書き込み可能ノード。
6. ユースケース
大量アクセスを捌くWebアプリやSaaS
ミッションクリティカルなシステム(高可用性必須)
読み取りが多い分析系アプリ
データベースのコスト最適化と運用負荷軽減
ACU
gpt-5.icon
Aurora(MySQL/PostgreSQL)を構成するためのサンプルを用途別に用意しました。
(VPCやサブネットは既にある前提。最小限のセキュリティグループ/サブネットグループも含めています)
ポイント
Auroraクラスター本体は aws_rds_cluster、各DBインスタンスは aws_rds_cluster_instance で作成します。(Terraform Registry)
Serverless v2 は engine_mode = "provisioned" + serverlessv2_scaling_configuration を aws_rds_cluster に設定します(v1のような engine_mode="serverless" ではありません)。(Terraform Registry, sorokin.engineer)
1) まずは最小構成(プロビジョンド:1 Writer + 1 Reader)
resource "aws_rds_cluster_parameter_group"
code:tf(rb)
# (任意)パラメータグループ
resource "aws_rds_cluster_parameter_group" "aurora" {
name = "${var.name}-cluster-pg"
family = "aurora-mysql8.0" # Postgresなら "aurora-postgresql16" 等に変更
description = "Aurora cluster parameter group"
parameters = [
{
name = "time_zone"
value = "UTC"
}
]
}
resource "aws_rds_cluster"
code:tf(rb)
# ---- Aurora クラスター本体 ----
resource "aws_rds_cluster" "aurora" {
cluster_identifier = var.name
engine = "aurora-mysql" # Postgresなら "aurora-postgresql"
engine_version = "8.0.mysql_aurora.3.06.0" # 例:要件に合わせて固定推奨
database_name = "app"
master_username = var.master_username
master_password = var.master_password
db_subnet_group_name = aws_db_subnet_group.aurora.name
vpc_security_group_ids = aws_security_group.aurora.id
backup_retention_period = 7
preferred_backup_window = "16:00-17:00"
deletion_protection = true
apply_immediately = true
copy_tags_to_snapshot = true
iam_database_authentication_enabled = true
db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.aurora.name
}
resource "aws_rds_cluster_instance"
code:tf(rb)
# Writer
resource "aws_rds_cluster_instance" "writer" {
identifier = "${var.name}-writer-1"
cluster_identifier = aws_rds_cluster.aurora.id
instance_class = "db.r7g.large" # 要件に応じて
engine = aws_rds_cluster.aurora.engine
engine_version = aws_rds_cluster.aurora.engine_version
publicly_accessible = false
}
code:tf(rb)
# Reader
resource "aws_rds_cluster_instance" "reader1" {
identifier = "${var.name}-reader-1"
cluster_identifier = aws_rds_cluster.aurora.id
instance_class = "db.r7g.large"
engine = aws_rds_cluster.aurora.engine
engine_version = aws_rds_cluster.aurora.engine_version
publicly_accessible = false
}
aws_rds_cluster / aws_rds_cluster_instance の使い分けや主要属性はTerraform Registryの公式ドキュメントが一次情報です。(Terraform Registry)
2) Aurora Serverless v2(MySQL/PostgreSQL)
重要: Serverless v2 はクラスター側で engine_mode = "provisioned" を使い、serverlessv2_scaling_configuration { min_capacity, max_capacity } を指定します(最小は 0.5 ACU)。インスタンス側は db.serverless クラスを使います。(Terraform Registry, sorokin.engineer, search.opentofu.org)
code:hcl(rb)
# クラスター(Serverless v2)
resource "aws_rds_cluster" "aurora_slsv2" {
cluster_identifier = "${var.name}-slsv2"
engine = "aurora-postgresql" # 例:Postgres
engine_version = "16.2" # Serverless v2対応バージョンを選択
engine_mode = "provisioned"
master_username = var.master_username
master_password = var.master_password
db_subnet_group_name = aws_db_subnet_group.aurora.name
vpc_security_group_ids = aws_security_group.aurora.id
backup_retention_period = 7
deletion_protection = true
apply_immediately = true
# Serverless v2 のスケーリング設定(ACU)
serverlessv2_scaling_configuration {
min_capacity = 0.5
max_capacity = 8
}
}
code:tf(rb)
# インスタンス(Serverless v2 は db.serverless を使用)
resource "aws_rds_cluster_instance" "slsv2_writer" {
identifier = "${var.name}-slsv2-w"
cluster_identifier = aws_rds_cluster.aurora_slsv2.id
instance_class = "db.serverless"
engine = aws_rds_cluster.aurora_slsv2.engine
engine_version = aws_rds_cluster.aurora_slsv2.engine_version
}
code:tf(rb)
resource "aws_rds_cluster_instance" "slsv2_reader" {
identifier = "${var.name}-slsv2-r1"
cluster_identifier = aws_rds_cluster.aurora_slsv2.id
instance_class = "db.serverless"
engine = aws_rds_cluster.aurora_slsv2.engine
engine_version = aws_rds_cluster.aurora_slsv2.engine_version
}
Serverless v2 の考え方(ACU最小0.5、v1との違いなど)は解説記事とAWS公式ユーザーガイドも参考になります。(sorokin.engineer, AWS ドキュメント)
3) Aurora Global Database(必要なら)
マルチリージョンのグローバルDBが必要な場合は aws_rds_global_cluster を追加し、各リージョンにクラスターをぶら下げます。(Terraform Registry)
code:hcl(rb)
resource "aws_rds_global_cluster" "global" {
global_cluster_identifier = "${var.name}-global"
engine = "aurora-mysql"
}
code:tf(rb)
# Primary (例: ap-northeast-1)
resource "aws_rds_cluster" "primary" {
cluster_identifier = "${var.name}-primary"
engine = "aurora-mysql"
global_cluster_identifier = aws_rds_global_cluster.global.id
# ...(前述の設定+サブネット/SGなど)
}
# Secondary (例: ap-northeast-3) は別プロバイダ/regionブロックを使って作成
# resource "aws_rds_cluster" "secondary" { ... }
4) variables.tf の例(抜粋)
code:hcl(rb)
variable "region" { type = string }
variable "name" { type = string }
variable "vpc_id" { type = string }
variable "private_subnet_ids" {
type = list(string)
}
code:tf(rb)
variable "ingress_cidrs" {
type = list(string)
default = "10.0.0.0/16" # 必要に応じて絞る
}
code:tf(rb)
variable "master_username" { type = string }
variable "master_password" {
type = string
sensitive = true
}
補足・Tips
バージョン固定:engine_version は明示的に固定し、計画外アップグレードを防ぎましょう。Terraformのリソース仕様やServerless v2の指定方法はRegistryの最新ページで確認を。(Terraform Registry)
Data API:Serverless v2とData APIの組み合わせは歴史的に制約や挙動の差異があり、要件次第で検証推奨(モジュール側Issue議論参照)。(GitHub)
モジュール利用:再利用性重視ならコミュニティモジュール(terraform-aws-modules/rds-aurora など)も便利です。(Terraform Registry, GitHub)